1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing;
18
19 import com.google.common.collect.testing.features.CollectionFeature;
20 import com.google.common.collect.testing.features.Feature;
21 import com.google.common.collect.testing.testers.CollectionSerializationEqualTester;
22 import com.google.common.collect.testing.testers.SetAddAllTester;
23 import com.google.common.collect.testing.testers.SetAddTester;
24 import com.google.common.collect.testing.testers.SetCreationTester;
25 import com.google.common.collect.testing.testers.SetEqualsTester;
26 import com.google.common.collect.testing.testers.SetHashCodeTester;
27 import com.google.common.collect.testing.testers.SetRemoveTester;
28 import com.google.common.testing.SerializableTester;
29
30 import junit.framework.TestSuite;
31
32 import java.util.ArrayList;
33 import java.util.Collection;
34 import java.util.HashSet;
35 import java.util.List;
36 import java.util.Set;
37
38
39
40
41
42
43
44 public class SetTestSuiteBuilder<E>
45 extends AbstractCollectionTestSuiteBuilder<SetTestSuiteBuilder<E>, E> {
46 public static <E> SetTestSuiteBuilder<E> using(
47 TestSetGenerator<E> generator) {
48 return new SetTestSuiteBuilder<E>().usingGenerator(generator);
49 }
50
51 @Override protected List<Class<? extends AbstractTester>> getTesters() {
52 List<Class<? extends AbstractTester>> testers
53 = Helpers.copyToList(super.getTesters());
54
55 testers.add(CollectionSerializationEqualTester.class);
56 testers.add(SetAddAllTester.class);
57 testers.add(SetAddTester.class);
58 testers.add(SetCreationTester.class);
59 testers.add(SetHashCodeTester.class);
60 testers.add(SetEqualsTester.class);
61 testers.add(SetRemoveTester.class);
62
63
64
65 return testers;
66 }
67
68 @Override
69 protected
70 List<TestSuite>
71 createDerivedSuites(
72 FeatureSpecificTestSuiteBuilder<
73 ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) {
74 List<TestSuite> derivedSuites = new ArrayList<TestSuite>(
75 super.createDerivedSuites(parentBuilder));
76
77 if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) {
78 derivedSuites.add(SetTestSuiteBuilder
79 .using(new ReserializedSetGenerator<E>(parentBuilder.getSubjectGenerator()))
80 .named(getName() + " reserialized")
81 .withFeatures(computeReserializedCollectionFeatures(parentBuilder.getFeatures()))
82 .suppressing(parentBuilder.getSuppressedTests())
83 .createTestSuite());
84 }
85 return derivedSuites;
86 }
87
88 static class ReserializedSetGenerator<E> implements TestSetGenerator<E>{
89 final OneSizeTestContainerGenerator<Collection<E>, E> gen;
90
91 private ReserializedSetGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) {
92 this.gen = gen;
93 }
94
95 @Override
96 public SampleElements<E> samples() {
97 return gen.samples();
98 }
99
100 @Override
101 public Set<E> create(Object... elements) {
102 return (Set<E>) SerializableTester.reserialize(gen.create(elements));
103 }
104
105 @Override
106 public E[] createArray(int length) {
107 return gen.createArray(length);
108 }
109
110 @Override
111 public Iterable<E> order(List<E> insertionOrder) {
112 return gen.order(insertionOrder);
113 }
114 }
115
116 private static Set<Feature<?>> computeReserializedCollectionFeatures(
117 Set<Feature<?>> features) {
118 Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>();
119 derivedFeatures.addAll(features);
120 derivedFeatures.remove(CollectionFeature.SERIALIZABLE);
121 derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS);
122 return derivedFeatures;
123 }
124 }